package leetcode.top100;

import java.util.Arrays;

/**
 * 给你一个长度为 n 的整数数组 nums，其中 n > 1，返回输出数组 output ，
 * <p>
 * 其中 output[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积。
 * <p>
 * 示例:
 * <p>
 * 输入: [1,2,3,4]
 * 输出: [24,12,8,6]
 *
 * @date 2020/4/28 13:15
 */
public class Code238_MultiExceptItSelf_自身外数组乘积 {
    public static void main(String[] args) {
        int[] nums = {1,2,3,4};
        int[] ints = productExceptSelf(nums);
        System.out.println(Arrays.toString(ints));
    }
    public static int[] productExceptSelf(int[] nums) {
        if(nums == null || nums.length <=0 ) return new int[0];
        int[]res = new int[nums.length];
        int pre = 1;
        //此时res[i]是 i左侧的所有元素乘积
        for (int i = 0; i < nums.length; i++) {
            res[i] = pre;
            pre *= nums[i];
        }
        pre = 1;
        //此时res[i]是 右侧所有元素乘积 * 原来的左侧，就是答案
        for (int i = nums.length -1; i >= 0; i--) {
            res[i] *= pre;
            pre *= nums[i];
        }
        return res;
    }
}
